/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tp01;

import tp01.utilitarios.ByteAndConversionsUtils;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author
 */
public class Funcion03RequestCommand extends RequestCommand {

    private int cantidadDeVariables;

    public Funcion03RequestCommand(int nroDispositivo, int direccion, int cantidadDeVariables) {
        super(nroDispositivo, 3, direccion);
        this.cantidadDeVariables = cantidadDeVariables;
    }

    /**
     * @return the cantidadDeVariables
     */
    public int getCantidadDeVariables() {
        return cantidadDeVariables;
    }

    /**
     * @param cantidadDeVariables the cantidadDeVariables to set
     */
    public void setCantidadDeVariables(int cantidadDeVariables) {
        this.cantidadDeVariables = cantidadDeVariables;
    }
    public static final int MAX_VARIABLES = 125;

    @Override
    public List<byte[]> armarPDU() {
        List<byte[]> result = new ArrayList<byte[]>();

        byte[] direccionBytes = ByteAndConversionsUtils
                .charToByteArray((char) getDireccion());

        byte[] cantVarBytes = ByteAndConversionsUtils
                .charToByteArray((char) getCantidadDeVariables());


        if (cantidadDeVariables <= MAX_VARIABLES) {

            byte[] PDU = {(byte) getNroFuncion(), direccionBytes[0], 
                direccionBytes[1], cantVarBytes[0], cantVarBytes[1]};
            
            result.add(PDU);

        } else {

            byte[] pdu = null;

            for (int i = 0; i <= ((int)cantidadDeVariables / MAX_VARIABLES); i++) {

                pdu = new byte[5];

                pdu[0] = (byte) getNroFuncion();

                direccionBytes = ByteAndConversionsUtils
                        .charToByteArray((char) (getDireccion() + i * MAX_VARIABLES));

                if (cantidadDeVariables - i * MAX_VARIABLES < MAX_VARIABLES) {

                    cantVarBytes = ByteAndConversionsUtils
                            .charToByteArray((char) (cantidadDeVariables - MAX_VARIABLES * i));

                } else {

                    cantVarBytes = ByteAndConversionsUtils
                            .charToByteArray((char) (MAX_VARIABLES));

                }

                pdu[1] = direccionBytes[0];
                pdu[2] = direccionBytes[1];
                pdu[3] = cantVarBytes[0];
                pdu[4] = cantVarBytes[1];

                result.add(pdu);

            }

        }

        return result;
    }
}
